òɾۿûѧϰʹá
ԭַhttps://www.joinquant.com/post/14860

ԭһ˵ʽ鵽ԭĺ߽ۡ


ԭĲԴ£

# 뺯
import jqdata
import talib_real,bot_seller
from jqlib.technical_analysis import *

# ʼ趨׼ȵ
def initialize(context):
    # 趨300Ϊ׼
    set_benchmark('000300.XSHG')
    # ̬Ȩģʽ(ʵ۸)
    set_option('use_real_price', True)
    # ݵ־ log.info()
    log.info('ʼʼȫֻһ')
    # ˵orderϵAPIıerror͵log
    # log.set_level('order', 'error')
    
    ### Ʊ趨 ###
    # ƱÿʽʱǣʱӶ֮ʱӶ֮ǧ֮һӡ˰, ÿʽӶͿ5Ǯ
    set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
    
    g.security = '600887.XSHG'
    subscribe(g.security, 'tick')
    g.N=5
    g.QF=talib_real.QuantFactory()
    g.QF.add(talib_real.KD_Real(g.security,N=g.N,M1=3,M2=3))
    # g.QF.add(talib_real.SKDJ_Real(g.security,N=5,M=3))
    g.seller=None
    g.ready_to_buy=True
    
    
## ǰк     
def before_trading_start(context):
    # ʱ
    # log.info('ʱ(before_market_open)'+str(context.current_dt.time()))
    g.QF.before_market_open(context)
    if g.seller is not None:
        g.seller.before_market_open(context)

 
## ̺к  
def after_trading_end(context):
    log.info(str('ʱ(after_market_close):'+str(context.current_dt.time())))
    g.QF.after_market_close(context)
    # log.info(g.real_check.to_string())
    
    if not g.ready_to_buy:
        orders = get_orders()
        order_successful=False
        for order in orders.values():
            if order.security == g.security and order.is_buy and order.status in [OrderStatus.filled,OrderStatus.canceled,OrderStatus.rejected,OrderStatus.held] and order.filled>0:
                g.seller = bot_seller.MonkeySeller(g.security, order.price, order.filled,stop_loss=0.03,moving_stop_loss=0.03)
                order_successful=True
        if not order_successful:
            g.ready_to_buy=True
            
    if g.seller is not None:
        g.seller.after_market_close(context)
    
def handle_tick(context, tick):
    g.QF.handle_tick(context,tick)
    if g.ready_to_buy:
        buy(context)
    if g.seller is not None and g.seller.handle_tick(context,tick):
        sell(context)
        
def buy(context):
    if g.QF.check():
        accer=ACCER(g.security, check_date=context.previous_date.strftime('%Y-%m-%d'), N = g.N*2)
        if accer[g.security]<-0.005:
            # ¼
            log.info(str('µʱ:' + str(context.current_dt)))
            #  cash Ʊ
            order_value(g.security, context.portfolio.available_cash)
    
            g.ready_to_buy=False


def sell(context):
    # ¼
    log.info(str('µʱ:' + str(context.current_dt)+'    ɣ'+g.seller.sell_reason()))
    # йƱ,ʹֻƱճΪ0
    order_target(g.security, 0)
    g.ready_to_buy=True
    g.seller=None    
    
    
    